/*=====================================================================================================*/
/*=====================================================================================================*/
#include "stm32f4_system.h"
#include "stm32f4_i2c.h"
#include "stm32f4_sdio.h"
#include "module_sensor.h"
#include "module_mpu6050.h"
#include "module_hmc5883.h"
#include "module_ms5611.h"

#include "ff.h"
#include "diskio.h"
/*=====================================================================================================*/
/*=====================================================================================================*/
#define SD_BUF_SIZE 128
extern vu16* SD_Buf;
extern vu8 SD_Flag;
/*=====================================================================================================*/
/*=====================================================================================================*/
void SysTick_Handler( void )
{
  static u16 count = 0;
  u8 IMU_Buf[20] = {0};

  /* 400Hz */
  I2C_DMA_ReadReg(MPU6050_I2C_ADDR, MPU6050_ACCEL_XOUT_H, IMU_Buf,   14);
  I2C_DMA_ReadReg(HMC5883_I2C_ADDR, HMC5883_REG_DATA_X_H, IMU_Buf+14, 6);

  Acc.X = (s16)((IMU_Buf[0]  << 8) | IMU_Buf[1]);
  Acc.Y = (s16)((IMU_Buf[2]  << 8) | IMU_Buf[3]);
  Acc.Z = (s16)((IMU_Buf[4]  << 8) | IMU_Buf[5]);
  // Tmp   = (s16)((IMU_Buf[6]  << 8) | IMU_Buf[7]);
  Gyr.X = (s16)((IMU_Buf[8]  << 8) | IMU_Buf[9]);
  Gyr.Y = (s16)((IMU_Buf[10] << 8) | IMU_Buf[11]);
  Gyr.Z = (s16)((IMU_Buf[12] << 8) | IMU_Buf[13]);
  Mag.X = (s16)((IMU_Buf[14] << 8) | IMU_Buf[15]);
  Mag.Y = (s16)((IMU_Buf[16] << 8) | IMU_Buf[17]);
  Mag.Z = (s16)((IMU_Buf[18] << 8) | IMU_Buf[19]);

  SD_Buf[count]   = Acc.X;
//  SD_Buf[count+1] = Acc.Y;
//  SD_Buf[count+2] = Acc.Z;
//  SD_Buf[count+3] = Gyr.X;
//  SD_Buf[count+4] = Gyr.Y;
//  SD_Buf[count+5] = Gyr.Z;
//  SD_Buf[count+6] = Mag.X;
//  SD_Buf[count+7] = Mag.Y;
//  SD_Buf[count+8] = Mag.Z;
  count++;
  if(count == SD_BUF_SIZE) {
    count = 0;
    SD_Flag = 1;
  }
}
/*=====================================================================================================*/
/*=====================================================================================================*/
void DMA1_Stream0_IRQHandler( void )
{
	I2C1_Recv_DMA_IRQ();
}
/*=====================================================================================================*/
/*=====================================================================================================*/
void DMA1_Stream6_IRQHandler( void )
{
	I2C1_Send_DMA_IRQ();
}
/*=====================================================================================================*/
/*=====================================================================================================*/
void SDIO_IRQHandler(void)
{
  /* Process All SDIO Interrupt Sources */
  SD_ProcessIRQSrc();
}
/*=====================================================================================================*/
/*=====================================================================================================*/
void DMA2_Stream3_IRQHandler(void)
{
  /* Process DMA2 Stream3 or DMA2 Stream6 Interrupt Sources */
  SD_ProcessDMAIRQ();
}
/*=====================================================================================================*/
/*=====================================================================================================*/
void HardFault_Handler( void )
{
  while(1);
}
void MemManage_Handler( void )
{
  while(1);
}
void BusFault_Handler( void )
{
  while(1);
}
void UsageFault_Handler( void )
{
  while(1);
}
void SVC_Handler( void )
{
  while(1);
}
void DebugMon_Handler( void )
{
  while(1);
}
void PendSV_Handler( void )
{
  while(1);
}
void NMI_Handler( void )
{
  while(1);
}
/*=====================================================================================================*/
/*=====================================================================================================*/
